---
id: faqs
title: Frequently Asked Questions
---

## Why use gRPC?

`gRPC` has a number of benefits for this project:

- Evolution of interfaces means that features can be added for particular calls added, without the need for numeric versioning.
- `gRPC` supports bidirectional streams. This is hugely beneficial for commands that produce incremental output of an indeterminate length. For example, this is heavily used in streaming video or logs from iOS.
- `gRPC` provides flexibility in the implementation of the server/companion. This may allow us to migrate `idb`'s companion server to a Swift implementation away from a Objective-C++ one without affecting the client's implementation.

## Where did `fbsimctl` go?

`fbsimctl` has now been removed from the codebase. `idb` is it's replacement. We learned a lot thought building `fbsimctl` which has informed a lot of the design considerations for `idb`. For instance, it had a very provisional "RPC" mechanism via sending HTTP requests which was one of the design goals of `idb`. All commands that `fbsimctl` has implemented are now implemented by `idb`.

The last working version of `fbsimctl` is [tagged as `v1.1.0`](https://github.com/facebook/idb/releases/tag/v1.1.0), which you can build or fork from. It has been removed from the codebase in the interests of clarity.
